
/*
    Software License

    Copyright (C) 2021-05-24  Xoronos

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, version 3.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

/*
    Liabilities

    The software is provided "AS IS" without any warranty of any kind, either expressed,
    implied, or statutory, including, but not limited to, any warranty that the software
    will conform to specifications, any implied warranties of merchantability, fitness
    for a particular purpose, and freedom from infringement, and any warranty that the
    documentation will conform to the software, or any warranty that the software will
    be error free.

    In no event shall Xoronos be liable for any damages, including, but not limited to,
    direct, indirect, special or consequential damages, arising out of, resulting from,
    or in any way connected with this software, whether or not based upon warranty,
    contract, tort, or otherwise, whether or not injury was sustained by persons or
    property or otherwise, and whether or not loss was sustained from, or arose out of
    the results of, or use of, the software or services provided hereunder.

    To request the provided software under a different license you can contact us at
    support@xoronos.com
*/

#ifndef PARSER_OPT_H
#define PARSER_OPT_H
#include "parser.h"
#include "lexcheck.h"

//decoding_conf
int callback_decoding_conf_opt_compiled_param( char *args
 );
int callback_decoding_conf_opt_encoding_param( char *args
 );
int callback_decoding_conf_opt_init_file( char *args
 );
int callback_decoding_conf_opt_no_param( char *args
 );
int callback_decoding_conf_opt_no_password( char *args
 );
int callback_decoding_conf_opt_password_str( char *args
 );
int callback_decoding_conf_opt_no_running_err( char *args
 );

int callback_decoding_conf_opt_running_err_th( char *args
 );
int callback_decoding_conf_opt_running_war_th( char *args
 );
int callback_decoding_conf_opt_no_disparity_err( char *args
 );

int callback_decoding_conf_opt_disparity_err_th( char *args
 );
int callback_decoding_conf_opt_disparity_war_th( char *args
 );

//encoding_conf
int callback_encoding_conf_opt_compiled_param( char *args
 );
int callback_encoding_conf_opt_encoding_param( char *args
 );
int callback_encoding_conf_opt_init_file( char *args
 );
int callback_encoding_conf_opt_no_param( char *args
 );
int callback_encoding_conf_opt_no_password( char *args
 );
int callback_encoding_conf_opt_password_str( char *args
 );
int callback_encoding_conf_opt_no_running_err( char *args
 );

int callback_encoding_conf_opt_running_err_th( char *args
 );
int callback_encoding_conf_opt_running_war_th( char *args
 );
int callback_encoding_conf_opt_no_disparity_err( char *args
 );

int callback_encoding_conf_opt_disparity_err_th( char *args
 );
int callback_encoding_conf_opt_disparity_war_th( char *args
 );

//arithmetic_conf
int callback_arithmetic_conf_opt_point( char *args
 );
int callback_arithmetic_conf_opt_binomial_key( char *args
 );
int callback_arithmetic_conf_opt_monomial_key( char *args
 );
int callback_arithmetic_conf_opt_start_point( char *args
 );
int callback_arithmetic_conf_opt_monomial_commitment( char *args
 );
int callback_arithmetic_conf_opt_binomial_commitment( char *args
 );
int callback_arithmetic_conf_opt_monomial_response( char *args
 );
int callback_arithmetic_conf_opt_monomial_proof( char *args
 );
int callback_arithmetic_conf_opt_monovalent_key( char *args
 );
int callback_arithmetic_conf_opt_polyvalent_proof( char *args
 );
int callback_arithmetic_conf_opt_polyvalent_key( char *args
 );
int callback_arithmetic_conf_opt_sym_signature( char *args
 );
int callback_arithmetic_conf_opt_asy_signature( char *args
 );
int callback_arithmetic_conf_opt_ring_signature( char *args
 );
int callback_arithmetic_conf_opt_hash( char *args
 );
int callback_arithmetic_conf_opt_sym_certificate( char *args
 );
int callback_arithmetic_conf_opt_asy_certificate( char *args
 );
int callback_arithmetic_conf_opt_state_size( char *args
 );
int callback_arithmetic_conf_opt_crc_bits( char *args
 );
int callback_arithmetic_conf_opt_rnd_str( char *args
 );
int callback_arithmetic_conf_opt_no_thread( char *args
 );
int callback_arithmetic_conf_opt_no_const_exec_time( char *args
 );

//sequence_conf
int callback_sequence_conf_opt_xmatrix_comp( char *args
 );
int callback_sequence_conf_opt_xmatrix( char *args
 );

//permutation_conf
int callback_permutation_conf_opt_arch( char *args
 );
int callback_permutation_conf_opt_shared_lib( char *args
 );

//logging_conf
int callback_logging_conf_opt_lib_error_log( char *args
 );
int callback_logging_conf_opt_lib_warning_log( char *args
 );
int callback_logging_conf_opt_lib_info_log( char *args
 );
int callback_logging_conf_opt_lib_debug_log( char *args
 );
int callback_logging_conf_opt_no_lib_error_log( char *args
 );
int callback_logging_conf_opt_no_lib_warning_log( char *args
 );

int callback_logging_conf_opt_force_write( char *args
 );
int callback_logging_conf_opt_force_append( char *args
 );
int callback_logging_conf_opt_debug_seed( char *args
 );

//dump_encoding_param
int callback_dump_encoding_param_opt_encoding_param( char *args
 );

//decode_encode
int callback_decode_encode_opt_to_decode( char *args
 );
int callback_decode_encode_opt_to_encode( char *args
 );

//mine_xmatrix_comp_rnd
int callback_mine_xmatrix_comp_rnd_opt_prob_ones( char *args
 );
int callback_mine_xmatrix_comp_rnd_opt_max_tries( char *args
 );
int callback_mine_xmatrix_comp_rnd_opt_xmatrix_comp( char *args
 );
int callback_mine_xmatrix_comp_rnd_opt_random( char *args
 );
int callback_mine_xmatrix_comp_rnd_opt_pseudo_random( char *args
 );

//mine_xmatrix_comp_ot
int callback_mine_xmatrix_comp_ot_opt_min_ones_per_row( char *args
 );
int callback_mine_xmatrix_comp_ot_opt_max_ones_per_row( char *args
 );
int callback_mine_xmatrix_comp_ot_opt_max_tries( char *args
 );
int callback_mine_xmatrix_comp_ot_opt_xmatrix_comp( char *args
 );
int callback_mine_xmatrix_comp_ot_opt_random( char *args
 );
int callback_mine_xmatrix_comp_ot_opt_pseudo_random( char *args
 );

//permute_xmatrix_comp_random
int callback_permute_xmatrix_comp_random_opt_xmatrix_comp_dst( char *args
 );

//permute_xmatrix_comp_deterministic
int callback_permute_xmatrix_comp_deterministic_opt_xmatrix_comp_dst( char *args
 );

int callback_permute_xmatrix_comp_confidential_opt_xmatrix_comp_dst( char *args
 );

//decompress_xmatrix
int callback_decompress_xmatrix_opt_xmatrix( char *args
 );

//make_point
int callback_make_point_opt_point( char *args
 );

//make_confidential_pseudo_random_number
int callback_make_confidential_pseudo_random_number_opt_next_point( char *args
 );

//xrn_make_start_point
int callback_xrn_make_start_point_opt_start_point( char *args
 );

//make_monomial_key
int callback_make_monomial_key_opt_monomial_key( char *args
 );

//make_binomial_key
int callback_make_binomial_key_opt_binomial_key( char *args
 );

//exchange_monomial_key
int callback_exchange_monomial_key_opt_external_binomial_key( char *args
 );
int callback_exchange_monomial_key_opt_shared_monomial_key( char *args
 );

//make_monovalent_key
int callback_make_monovalent_key_opt_monovalent_key( char *args
 );
int callback_make_monovalent_key_opt_polyvalent_key( char *args
 );
int callback_make_monovalent_key_opt_polyvalent_proof( char *args
 );
int callback_make_monovalent_key_opt_start_timestamp( char *args
 );
int callback_make_monovalent_key_opt_end_timestamp( char *args
 );

//exchange_polyvalent_key
int callback_exchange_polyvalent_key_opt_external_monovalent_key( char *args
 );
int callback_exchange_polyvalent_key_opt_shared_polyvalent_key( char *args
 );

//make_commitment_binomial_key
int callback_make_commitment_binomial_key_opt_monomial_commitment( char *args
 );
int callback_make_commitment_binomial_key_opt_binomial_commitment( char *args
 );

//make_commitment_sym_signature
int callback_make_commitment_sym_signature_opt_monomial_commitment( char *args
 );
int callback_make_commitment_sym_signature_opt_plain_text( char *args
 );
int callback_make_commitment_sym_signature_opt_binomial_commitment( char *args
 );

//make_commitment_sym_certificates
int callback_make_commitment_sym_certificates_opt_monomial_commitment( char *args
 );
int callback_make_commitment_sym_certificates_opt_binomial_commitment( char *args
 );

//make_response
int callback_make_response_opt_monomial_response( char *args
 );

//make_monomial_proof
int callback_make_monomial_proof_opt_monomial_proof( char *args
 );

//make_monomial_proof_sym_signature
int callback_make_monomial_proof_sym_signature_opt_monomial_proof( char *args
 );
int callback_make_monomial_proof_sym_signature_opt_plain_text( char *args
 );

//make_monomial_proof_sym_certificate
int callback_make_monomial_proof_sym_certificate_opt_monomial_proof( char *args
 );

//check_monomial_proof_sym_signature
int callback_check_monomial_proof_sym_signature_opt_plain_text( char *args
 );

//check_monomial_proof_sym_certificate

//make_symmetric_signature
int callback_make_symmetric_signature_opt_plain_text( char *args
 );
int callback_make_symmetric_signature_opt_symmetric_signature( char *args
 );

//make_asymmetric_signature
int callback_make_asymmetric_signature_opt_plain_text( char *args
 );
int callback_make_asymmetric_signature_opt_asymmetric_signature( char *args
 );

//make_ring_signature
int callback_make_ring_signature_opt_add_decoy_binomial_key( char *args
 );
int callback_make_ring_signature_opt_plain_text( char *args
 );
int callback_make_ring_signature_opt_verifier_binomial_key( char *args
 );
int callback_make_ring_signature_opt_ring_signature( char *args
 );

//permute_ring_signature
int callback_permute_ring_signature_opt_signer_binomial_key( char *args
 );
int callback_permute_ring_signature_opt_verifier_binomial_key( char *args
 );
int callback_permute_ring_signature_opt_signer_ring_signature( char *args
 );
int callback_permute_ring_signature_opt_verifier_ring_signature( char *args
 );
int callback_permute_ring_signature_opt_permuted_ring_signature( char *args
 );

//make_symmetric_certificate
int callback_make_symmetric_certificate_opt_subject_str( char *args
 );
int callback_make_symmetric_certificate_opt_subject_monovalent_key( char *args
 );
int callback_make_symmetric_certificate_opt_symmetric_certificate( char *args
 );
int callback_make_symmetric_certificate_opt_start_timestamp( char *args
 );
int callback_make_symmetric_certificate_opt_end_timestamp( char *args
 );

//make_asymmetric_certificate

int callback_make_asymmetric_certificate_opt_subject_binomial_key( char *args
 );

int callback_make_asymmetric_certificate_opt_subject_str( char *args
 );

int callback_make_asymmetric_certificate_opt_asymmetric_certificate( char *args
 );
int callback_make_asymmetric_certificate_opt_start_timestamp( char *args
 );
int callback_make_asymmetric_certificate_opt_end_timestamp( char *args
 );

//check_symmetric_signature
int callback_check_symmetric_signature_opt_plain_text( char *args
 );

//check_asymmetric_signature
int callback_check_asymmetric_signature_opt_plain_text( char *args
 );

//check_ring_signature
int callback_check_ring_signature_opt_plain_text( char *args
 );
int callback_check_ring_signature_opt_signer_binomial_key( char *args
 );

//check_symmetric_certificate

//check_asymmetric_certificate

//make_hash
int callback_make_hash_opt_plain_text( char *args
 );
int callback_make_hash_opt_hash( char *args
 );

//make_checksum
int callback_make_checksum_opt_plain_text( char *args
 );
int callback_make_checksum_opt_checksum_text( char *args
 );

//check_checksum
int callback_check_checksum_opt_plain_text( char *args
 );
int callback_check_checksum_opt_checksum_text( char *args
 );

//check_hash
int callback_check_hash_opt_plain_text( char *args
 );

//convert_hash_to_point
int callback_convert_hash_to_point_opt_point( char *args
 );

//convert_point_to_monomial_key
int callback_convert_point_to_monomial_key_opt_monomial_key( char *args
 );

//convert_monomial_key_to_point
int callback_convert_monomial_key_to_point_opt_point( char *args
 );

//convert_binomial_key_to_start_point
int callback_convert_binomial_key_to_start_point_opt_start_point( char *args
 );

//convert_start_point_to_point
int callback_convert_start_point_to_point_opt_point( char *args
 );

//convert_point_to_start_point
int callback_convert_point_to_start_point_opt_start_point( char *args
 );

//convert_monomial_key_to_monomial_commitment
int callback_convert_monomial_key_to_monomial_commitment_opt_monomial_commitment( char *args
 );

//convert_monomial_commitment_to_monomial_key
int callback_convert_monomial_commitment_to_monomial_key_opt_monomial_key( char *args
 );

//convert_asym_certificate_to_binomial_key
int callback_convert_asymmetric_certificate_to_binomial_key_opt_binomial_key( char *args
 );

//convert asymmetric signature to binomial key
int callback_convert_asymmetric_signature_to_binomial_key_opt_binomial_key( char *args
 );

//convert symmetric signature to binomial key
int callback_convert_symmetric_signature_to_binomial_key_opt_binomial_key( char *args
 );

//convert binomial key to asymmetric signature 
int callback_convert_binomial_key_to_asymmetric_signature_opt_asymmetric_signature( char *args
 );

//convert binomial key to symmetric signature 
int callback_convert_binomial_key_to_symmetric_signature_opt_symmetric_signature( char *args
 );

//convert_hash_commitment_to_monomial_key
int callback_convert_hash_to_monomial_key_opt_monomial_key( char *args
 );

int callback_convert_sym_certificate_to_monovalent_key_opt_monovalent_key( char *args
 );

//split_symmetric
int callback_split_symmetric_opt_plain_text( char *args
 );
int callback_split_symmetric_opt_challenge_text( char *args
 );
int callback_split_symmetric_opt_solution_text( char *args
 );

//encrypt_asymmetric
int callback_encrypt_asymmetric_opt_plain_text( char *args
 );
int callback_encrypt_asymmetric_opt_cipher_text( char *args
 );

//encrypt_symmetric
int callback_encrypt_symmetric_opt_plain_text( char *args
 );
int callback_encrypt_symmetric_opt_cipher_text( char *args
 );

//join_symmetric
int callback_join_symmetric_opt_plain_text( char *args
 );
int callback_join_symmetric_opt_challenge_text( char *args
 );
int callback_join_symmetric_opt_solution_text( char *args
 );

//decipher_asymmetric
int callback_decipher_asymmetric_opt_plain_text( char *args
 );
int callback_decipher_asymmetric_opt_cipher_text( char *args
 );

//decipher_symmetric
int callback_decipher_symmetric_opt_plain_text( char *args
 );
int callback_decipher_symmetric_opt_cipher_text( char *args
 );

//check_complete_blocks
int callback_check_complete_blocks_opt_block_file( char *args
 );

// get_capacity
int callback_get_capacity_opt_envelop_file( char *args
 );
int callback_get_capacity_opt_disable_folding( char *args
 );

// make_steganography_raw
int callback_make_steganography_raw_opt_source_file( char *args
 );
int callback_make_steganography_raw_opt_envelop_file( char *args
 );
int callback_make_steganography_raw_opt_embedded_file( char *args
 );

// extract_steganography_raw
int callback_extract_steganography_raw_opt_embedded_file( char *args
 );
int callback_extract_steganography_raw_opt_raw_file( char *args
 );

// make_steganography_block
int callback_make_steganography_block_opt_source_file( char *args
 );
int callback_make_steganography_block_opt_envelop_file( char *args
 );
int callback_make_steganography_block_opt_embedded_file( char *args
 );
int callback_make_steganography_block_opt_disable_folding( char *args
 );
int callback_make_steganography_block_opt_offset( char *args
 );
int callback_make_steganography_block_opt_length( char *args
 );
int callback_make_steganography_block_opt_tag( char *args
 );

// extract_steganography_block
int callback_extract_steganography_block_opt_embedded_file( char *args
 );
int callback_extract_steganography_block_opt_block_file( char *args
 );

//make_block
int callback_make_block_opt_offset( char *args
 );
int callback_make_block_opt_length( char *args
 );
int callback_make_block_opt_tag( char *args
 );
int callback_make_block_opt_plain_text( char *args
 );
int callback_make_block_opt_block_file( char *args
 );

//merge_block_symmetric
int callback_combine_block_opt_block_file( char *args
 );
int callback_combine_block_opt_combined_block_file( char *args
 );

//strip_block_header
int callback_strip_header_from_block_opt_block_file( char *args
 );
int callback_strip_header_from_block_opt_plain_text( char *args
 );

//print_header
int callback_print_header_opt_xrn_file( char *args
 );

//command
parser_callback_option callback_option_command[] = {
};

//decoding_conf
parser_callback_option callback_option_decoding_conf[] = {
    {
     .command = XDC_COMPILED_PARAM,
     .func = &callback_decoding_conf_opt_compiled_param,
      },
    {
     .command = XDC_ENCODING_PARAM,
     .func = &callback_decoding_conf_opt_encoding_param,
      },
    {
     .command = XDC_NO_PARAM,
     .func = &callback_decoding_conf_opt_no_param,
      },
    {
     .command = XDC_INIT_FILE,
     .func = &callback_decoding_conf_opt_init_file,
      },
    {
     .command = XDC_NO_PASSWORD,
     .func = &callback_decoding_conf_opt_no_password,
      },
    {
     .command = XDC_PASSWORD_STR,
     .func = &callback_decoding_conf_opt_password_str,
      },
    {
     .command = XDC_NO_RUNNING_ERR,
     .func = &callback_decoding_conf_opt_no_running_err,
      },
    {
     .command = XDC_RUNNING_ERR_TH,
     .func = &callback_decoding_conf_opt_running_err_th,
      },
    {
     .command = XDC_RUNNING_WAR_TH,
     .func = &callback_decoding_conf_opt_running_war_th,
      },
    {
     .command = XDC_NO_DISPARITY_ERR,
     .func = &callback_decoding_conf_opt_no_disparity_err,
      },
    {
     .command = XDC_DISPARITY_ERR_TH,
     .func = &callback_decoding_conf_opt_disparity_err_th,
      },
    {
     .command = XDC_DISPARITY_WAR_TH,
     .func = &callback_decoding_conf_opt_disparity_war_th,
      },
};

//encoding_conf
parser_callback_option callback_option_encoding_conf[] = {
    {
     .command = XEC_COMPILED_PARAM,
     .func = &callback_encoding_conf_opt_compiled_param,
      },
    {
     .command = XEC_ENCODING_PARAM,
     .func = &callback_encoding_conf_opt_encoding_param,
      },
    {
     .command = XEC_NO_PARAM,
     .func = &callback_encoding_conf_opt_no_param,
      },
    {
     .command = XEC_INIT_FILE,
     .func = &callback_encoding_conf_opt_init_file,
      },
    {
     .command = XEC_NO_PASSWORD,
     .func = &callback_encoding_conf_opt_no_password,
      },
    {
     .command = XEC_PASSWORD_STR,
     .func = &callback_encoding_conf_opt_password_str,
      },
    {
     .command = XEC_NO_RUNNING_ERR,
     .func = &callback_encoding_conf_opt_no_running_err,
      },
    {
     .command = XEC_RUNNING_ERR_TH,
     .func = &callback_encoding_conf_opt_running_err_th,
      },
    {
     .command = XEC_RUNNING_WAR_TH,
     .func = &callback_encoding_conf_opt_running_war_th,
      },
    {
     .command = XEC_NO_DISPARITY_ERR,
     .func = &callback_encoding_conf_opt_no_disparity_err,
      },
    {
     .command = XEC_DISPARITY_ERR_TH,
     .func = &callback_encoding_conf_opt_disparity_err_th,
      },
    {
     .command = XEC_DISPARITY_WAR_TH,
     .func = &callback_encoding_conf_opt_disparity_war_th,
      },
};

//arithmetic_conf
parser_callback_option callback_option_arithmetic_conf[] = {
    {
     .command = XAC_POINT,
     .func = &callback_arithmetic_conf_opt_point,
      },
    {
     .command = XAC_BINOMIAL_KEY,
     .func = &callback_arithmetic_conf_opt_binomial_key,
      },
    {
     .command = XAC_MONOMIAL_KEY,
     .func = &callback_arithmetic_conf_opt_monomial_key,
      },
    {
     .command = XAC_START_POINT,
     .func = &callback_arithmetic_conf_opt_start_point,
      },
    {
     .command = XAC_MONOMIAL_COMMITMENT,
     .func = &callback_arithmetic_conf_opt_monomial_commitment,
      },
    {
     .command = XAC_BINOMIAL_COMMITMENT,
     .func = &callback_arithmetic_conf_opt_binomial_commitment,
      },
    {
     .command = XAC_MONOMIAL_RESPONSE,
     .func = &callback_arithmetic_conf_opt_monomial_response,
      },
    {
     .command = XAC_MONOMIAL_PROOF,
     .func = &callback_arithmetic_conf_opt_monomial_proof,
      },
    {
     .command = XAC_MONOVALENT_KEY,
     .func = &callback_arithmetic_conf_opt_monovalent_key,
      },
    {
     .command = XAC_POLYVALENT_PROOF,
     .func = &callback_arithmetic_conf_opt_polyvalent_proof,
      },
    {
     .command = XAC_POLYVALENT_KEY,
     .func = &callback_arithmetic_conf_opt_polyvalent_key,
      },
    {
     .command = XAC_SYM_SIGNATURE,
     .func = &callback_arithmetic_conf_opt_sym_signature,
      },
    {
     .command = XAC_ASY_SIGNATURE,
     .func = &callback_arithmetic_conf_opt_asy_signature,
      },
    {
     .command = XAC_RING_SIGNATURE,
     .func = &callback_arithmetic_conf_opt_ring_signature,
      },
    {
     .command = XAC_HASH,
     .func = &callback_arithmetic_conf_opt_hash,
      },
    {
     .command = XAC_SYM_CERTIFICATE,
     .func = &callback_arithmetic_conf_opt_sym_certificate,
      },
    {
     .command = XAC_ASY_CERTIFICATE,
     .func = &callback_arithmetic_conf_opt_asy_certificate,
      },
    {
     .command = XAC_STATE_SIZE,
     .func = &callback_arithmetic_conf_opt_state_size,
      },
    {
     .command = XAC_CRC_BITS,
     .func = &callback_arithmetic_conf_opt_crc_bits,
      },
    {
     .command = XAC_RND_STR,
     .func = &callback_arithmetic_conf_opt_rnd_str,
      },
    {
     .command = XAC_NO_THREAD,
     .func = &callback_arithmetic_conf_opt_no_thread,
      },
    {
     .command = XAC_NO_CONST_EXEC_TIME,
     .func = &callback_arithmetic_conf_opt_no_const_exec_time,
      },
};

//sequence_conf
parser_callback_option callback_option_sequence_conf[] = {
    {
     .command = XSC_XMATRIX_COMP,
     .func = &callback_sequence_conf_opt_xmatrix_comp,
      },
    {
     .command = XSC_XMATRIX,
     .func = &callback_sequence_conf_opt_xmatrix,
      },
};

//permutation_conf
parser_callback_option callback_option_permutation_conf[] = {
    {
     .command = XPC_ARCH,
     .func = &callback_permutation_conf_opt_arch,
      },
    {
     .command = XPC_SHARED_LIB,
     .func = &callback_permutation_conf_opt_shared_lib,
      },
};

//logging_conf
parser_callback_option callback_option_logging_conf[] = {

    {
     .command = XLC_LIB_ERROR_LOG,
     .func = &callback_logging_conf_opt_lib_error_log,
      },
    {
     .command = XLC_LIB_WARNING_LOG,
     .func = &callback_logging_conf_opt_lib_warning_log,
      },
    {
     .command = XLC_LIB_INFO_LOG,
     .func = &callback_logging_conf_opt_lib_info_log,
      },
    {
     .command = XLC_LIB_DEBUG_LOG,
     .func = &callback_logging_conf_opt_lib_debug_log,
      },
    {
     .command = XLC_NO_LIB_ERROR_LOG,
     .func = &callback_logging_conf_opt_no_lib_error_log,
      },
    {
     .command = XLC_NO_LIB_WARNING_LOG,
     .func = &callback_logging_conf_opt_no_lib_warning_log,
      },
    {
     .command = XLC_FORCE_APPEND,
     .func = &callback_logging_conf_opt_force_append,
      },
    {
     .command = XLC_FORCE_WRITE,
     .func = &callback_logging_conf_opt_force_write,
      },
    {
     .command = XLC_DEBUG_SEED,
     .func = &callback_logging_conf_opt_debug_seed,
      }

};

//dump_encoding_param
parser_callback_option callback_option_dump_encoding_param[] = {
    {
     .command = XDEP_ENCODING_PARAM,
     .func = &callback_dump_encoding_param_opt_encoding_param,
      },
};

//decode_encode
parser_callback_option callback_option_decode_encode[] = {
    {
     .command = XDE_TO_DECODE,
     .func = &callback_decode_encode_opt_to_decode,
      },
    {
     .command = XDE_TO_ENCODE,
     .func = &callback_decode_encode_opt_to_encode,
      },
};

//mine_xmatrix_comp_rnd
parser_callback_option callback_option_mine_xmatrix_comp_rnd[] = {
    {
     .command = XMXCR_PROB_ONES,
     .func = &callback_mine_xmatrix_comp_rnd_opt_prob_ones,
      },
    {
     .command = XMXCR_MAX_TRIES,
     .func = &callback_mine_xmatrix_comp_rnd_opt_max_tries,
      },
    {
     .command = XMXCR_XMATRIX_COMP,
     .func = &callback_mine_xmatrix_comp_rnd_opt_xmatrix_comp,
      },
    {
     .command = XMXCR_RANDOM,
     .func = &callback_mine_xmatrix_comp_rnd_opt_random,
      },
    {
     .command = XMXCR_PSEUDO_RANDOM,
     .func = &callback_mine_xmatrix_comp_rnd_opt_pseudo_random,
      },
};

//mine_xmatrix_comp_ot
parser_callback_option callback_option_mine_xmatrix_comp_ot[] = {
    {
     .command = XMXCO_MIN_ONES_PER_ROW,
     .func = &callback_mine_xmatrix_comp_ot_opt_min_ones_per_row,
      },
    {
     .command = XMXCO_MAX_ONES_PER_ROW,
     .func = &callback_mine_xmatrix_comp_ot_opt_max_ones_per_row,
      },
    {
     .command = XMXCO_MAX_TRIES,
     .func = &callback_mine_xmatrix_comp_ot_opt_max_tries,
      },
    {
     .command = XMXCO_XMATRIX_COMP,
     .func = &callback_mine_xmatrix_comp_ot_opt_xmatrix_comp,
      },
    {
     .command = XMXCO_RANDOM,
     .func = &callback_mine_xmatrix_comp_ot_opt_random,
      },
    {
     .command = XMXCO_PSEUDO_RANDOM,
     .func = &callback_mine_xmatrix_comp_ot_opt_pseudo_random,
      },
};

//permute_xmatrix_comp_random
parser_callback_option callback_option_permute_xmatrix_comp_random[] = {
    {
     .command = XPXCR_XMATRIX_COMP_DST,
     .func = &callback_permute_xmatrix_comp_random_opt_xmatrix_comp_dst,
      },
};

//permute_xmatrix_comp_deterministic
parser_callback_option callback_option_permute_xmatrix_comp_deterministic[] = {
    {
     .command = XPXCD_XMATRIX_COMP_DST,
     .func = &callback_permute_xmatrix_comp_deterministic_opt_xmatrix_comp_dst,
      },
};

//permute_xmatrix_comp_deterministic
parser_callback_option callback_option_permute_xmatrix_comp_confidential[] = {
    {
     .command = XPXCS_XMATRIX_COMP_DST,
     .func = &callback_permute_xmatrix_comp_confidential_opt_xmatrix_comp_dst,
      },
};

//decompress_xmatrix
parser_callback_option callback_option_decompress_xmatrix[] = {
    {
     .command = XDX_XMATRIX,
     .func = &callback_decompress_xmatrix_opt_xmatrix,
      },
};

//check_xmatrix_comp
parser_callback_option callback_option_check_xmatrix_comp[] = {
};

//check_xmatrix
parser_callback_option callback_option_check_xmatrix[] = {
};

//make_point
parser_callback_option callback_option_make_point[] = {
    {
     .command = XMP_POINT,
     .func = &callback_make_point_opt_point,
      },
};

//make_confidential_pseudo_random_number
parser_callback_option callback_option_make_confidential_pseudo_random_number[] = {
    {
     .command = XMSPRN_NEXT_POINT,
     .func = &callback_make_confidential_pseudo_random_number_opt_next_point,
      },
};

//xrn_make_start_point
parser_callback_option callback_option_make_start_point[] = {
    {
     .command = XMSP_START_POINT,
     .func = &callback_xrn_make_start_point_opt_start_point,
      },
};

//make_monomial_key
parser_callback_option callback_option_make_monomial_key[] = {
    {
     .command = XMMK_MONOMIAL_KEY,
     .func = &callback_make_monomial_key_opt_monomial_key,
      },
};

//make_binomial_key
parser_callback_option callback_option_make_binomial_key[] = {
    {
     .command = XMBK_BINOMIAL_KEY,
     .func = &callback_make_binomial_key_opt_binomial_key,
      },
};

//exchange_monomial_key
parser_callback_option callback_option_exchange_monomial_key[] = {
    {
     .command = XEMK_EXTERNAL_BINOMIAL_KEY,
     .func = &callback_exchange_monomial_key_opt_external_binomial_key,
      },
    {
     .command = XEMK_SHARED_MONOMIAL_KEY,
     .func = &callback_exchange_monomial_key_opt_shared_monomial_key,
      },
};

//make_monovalent_key
parser_callback_option callback_option_make_monovalent_key[] = {
    {
     .command = XMMK_MONOVALENT_KEY,
     .func = &callback_make_monovalent_key_opt_monovalent_key,
      },
    {
     .command = XMMK_POLYVALENT_KEY,
     .func = &callback_make_monovalent_key_opt_polyvalent_key,
      },
    {
     .command = XMMK_POLYVALENT_PROOF,
     .func = &callback_make_monovalent_key_opt_polyvalent_proof,
      },
    {
     .command = XMMK_START_TIMESTAMP,
     .func = &callback_make_monovalent_key_opt_start_timestamp,
      },
    {
     .command = XMMK_END_TIMESTAMP,
     .func = &callback_make_monovalent_key_opt_end_timestamp,
      },
};

//exchange_polyvalent_key
parser_callback_option callback_option_exchange_polyvalent_key[] = {
    {
     .command = XEPK_EXTERNAL_MONOVALENT_KEY,
     .func = &callback_exchange_polyvalent_key_opt_external_monovalent_key,
      },
    {
     .command = XEPK_SHARED_POLYVALENT_KEY,
     .func = &callback_exchange_polyvalent_key_opt_shared_polyvalent_key,
      },
};

//check_monovalent_key
parser_callback_option callback_option_check_monovalent_key[] = {
};

//make_commitment_binomial_key
parser_callback_option callback_option_make_commitment_binomial_key[] = {
    {
     .command = XMCBK_MONOMIAL_COMMITMENT,
     .func = &callback_make_commitment_binomial_key_opt_monomial_commitment,
      },
    {
     .command = XMCBK_BINOMIAL_COMMITMENT,
     .func = &callback_make_commitment_binomial_key_opt_binomial_commitment,
      },
};

//make_commitment_sym_signature
parser_callback_option callback_option_make_commitment_sym_signature[] = {
    {
     .command = XMCSS_MONOMIAL_COMMITMENT,
     .func = &callback_make_commitment_sym_signature_opt_monomial_commitment,
      },
    {
     .command = XMCSS_BINOMIAL_COMMITMENT,
     .func = &callback_make_commitment_sym_signature_opt_binomial_commitment,
      },
    {
     .command = XMCSS_PLAIN_TEXT,
     .func = &callback_make_commitment_sym_signature_opt_plain_text,
      },
};

//make_commitment_sym_certificates
parser_callback_option callback_option_make_commitment_sym_certificate[] = {
    {
     .command = XMCSC_MONOMIAL_COMMITMENT,
     .func = &callback_make_commitment_sym_certificates_opt_monomial_commitment,
      },
    {
     .command = XMCSC_BINOMIAL_COMMITMENT,
     .func = &callback_make_commitment_sym_certificates_opt_binomial_commitment,
      },
};

//make_response
parser_callback_option callback_option_make_response[] = {
    {
     .command = XMR_MONOMIAL_RESPONSE,
     .func = &callback_make_response_opt_monomial_response,
      },
};

//make_monomial_proof
parser_callback_option callback_option_make_monomial_proof[] = {
    {
     .command = XMMP_MONOMIAL_PROOF,
     .func = &callback_make_monomial_proof_opt_monomial_proof,
      },
};

//make_monomial_proof_sym_signature
parser_callback_option callback_option_make_monomial_proof_sym_signature[] = {
    {
     .command = XMMPSS_MONOMIAL_PROOF,
     .func = &callback_make_monomial_proof_sym_signature_opt_monomial_proof,
      },
    {
     .command = XMMPSS_PLAIN_TEXT,
     .func = &callback_make_monomial_proof_sym_signature_opt_plain_text,
      },
};

//make_monomial_proof_sym_certificate
parser_callback_option callback_option_make_monomial_proof_sym_certificate[] = {
    {
     .command = XMMPSC_MONOMIAL_PROOF,
     .func = &callback_make_monomial_proof_sym_certificate_opt_monomial_proof,
      },

};

//check_monomial_proof
parser_callback_option callback_option_check_monomial_proof[] = {

};

//check_monomial_proof_sym_signature
parser_callback_option callback_option_check_monomial_proof_sym_signature[] = {
    {
     .command = XCMPSS_PLAIN_TEXT,
     .func = &callback_check_monomial_proof_sym_signature_opt_plain_text,
      },
};

//check_monomial_proof_sym_certificate
parser_callback_option callback_option_check_monomial_proof_sym_certificate[] = {

};

//make_symmetric_signature
parser_callback_option callback_option_make_signature_symmetric[] = {
    {
     .command = XMSS_PLAIN_TEXT,
     .func = &callback_make_symmetric_signature_opt_plain_text,
      },
    {
     .command = XMSS_SYMMETRIC_SIGNATURE,
     .func = &callback_make_symmetric_signature_opt_symmetric_signature,
      },
};

//make_asymmetric_signature
parser_callback_option callback_option_make_signature_asymmetric[] = {
    {
     .command = XMSA_PLAIN_TEXT,
     .func = &callback_make_asymmetric_signature_opt_plain_text,
      },
    {
     .command = XMSA_ASYMMETRIC_SIGNATURE,
     .func = &callback_make_asymmetric_signature_opt_asymmetric_signature,
      },
};

//make_ring_signature
parser_callback_option callback_option_make_ring_signature[] = {
    {
     .command = XMRS_ADD_DECOY_BINOMIAL_KEY,
     .func = &callback_make_ring_signature_opt_add_decoy_binomial_key,
      },
    {
     .command = XMRS_PLAIN_TEXT,
     .func = &callback_make_ring_signature_opt_plain_text,
      },
    {
     .command = XMRS_VERIFIER_BINOMIAL_KEY,
     .func = &callback_make_ring_signature_opt_verifier_binomial_key,
      },
    {
     .command = XMRS_RING_SIGNATURE,
     .func = &callback_make_ring_signature_opt_ring_signature,
      },

};

//permute_ring_signature
parser_callback_option callback_option_permute_ring_signature[] = {
    {
     .command = XPRS_SIGNER_BINOMIAL_KEY,
     .func = &callback_permute_ring_signature_opt_signer_binomial_key,
      },
    {
     .command = XPRS_VERIFIER_BINOMIAL_KEY,
     .func = &callback_permute_ring_signature_opt_verifier_binomial_key,
      },
    {
     .command = XPRS_SIGNER_RING_SIGNATURE,
     .func = &callback_permute_ring_signature_opt_signer_ring_signature,
      },
    {
     .command = XPRS_VERIFIER_RING_SIGNATURE,
     .func = &callback_permute_ring_signature_opt_verifier_ring_signature,
      },
    {
     .command = XPRS_PERMUTED_RING_SIGNATURE,
     .func = &callback_permute_ring_signature_opt_permuted_ring_signature,
      },

};

//make_symmetric_certificate
parser_callback_option callback_option_make_certificate_symmetric[] = {
    {
     .command = XMCS_SUBJECT_MONOVALENT_KEY,
     .func = &callback_make_symmetric_certificate_opt_subject_monovalent_key,
      },
    {
     .command = XMCS_SUBJECT_STR,
     .func = &callback_make_symmetric_certificate_opt_subject_str,
      },
    {
     .command = XMCS_SYMMETRIC_CERTIFICATE,
     .func = &callback_make_symmetric_certificate_opt_symmetric_certificate,
      },
    {
     .command = XMCS_START_TIMESTAMP,
     .func = &callback_make_symmetric_certificate_opt_start_timestamp,
      },
    {
     .command = XMCS_END_TIMESTAMP,
     .func = &callback_make_symmetric_certificate_opt_end_timestamp,
      },
};

//make_asymmetric_certificate
parser_callback_option callback_option_make_certificate_asymmetric[] = {
    {
     .command = XMCA_SUBJECT_BINOMIAL_KEY,
     .func = &callback_make_asymmetric_certificate_opt_subject_binomial_key,
      },
    {
     .command = XMCA_SUBJECT_STR,
     .func = &callback_make_asymmetric_certificate_opt_subject_str,
      },
    {
     .command = XMCA_ASYMMETRIC_CERTIFICATE,
     .func = &callback_make_asymmetric_certificate_opt_asymmetric_certificate,
      },
    {
     .command = XMCA_START_TIMESTAMP,
     .func = &callback_make_asymmetric_certificate_opt_start_timestamp,
      },
    {
     .command = XMCA_END_TIMESTAMP,
     .func = &callback_make_asymmetric_certificate_opt_end_timestamp,
      },
};

//check_symmetric_signature
parser_callback_option callback_option_check_signature_symmetric[] = {

    {
     .command = XCSS_PLAIN_TEXT,
     .func = &callback_check_symmetric_signature_opt_plain_text,
      },
};

//check_asymmetric_signature
parser_callback_option callback_option_check_signature_asymmetric[] = {

    {
     .command = XCSA_PLAIN_TEXT,
     .func = &callback_check_asymmetric_signature_opt_plain_text,
      },

};

//check_ring_signature
parser_callback_option callback_option_check_ring_signature[] = {

    {
     .command = XCRS_PLAIN_TEXT,
     .func = &callback_check_ring_signature_opt_plain_text,
      },

    {
     .command = XCRS_SIGNER_BINOMIAL_KEY,
     .func = &callback_check_ring_signature_opt_signer_binomial_key,
      },

};

//check_symmetric_certificate
parser_callback_option callback_option_check_certificate_symmetric[] = {

};

//check_asymmetric_certificate
parser_callback_option callback_option_check_certificate_asymmetric[] = {

};

//make_hash
parser_callback_option callback_option_make_hash[] = {
    {
     .command = XMH_PLAIN_TEXT,
     .func = &callback_make_hash_opt_plain_text,
      },
    {
     .command = XMH_HASH,
     .func = &callback_make_hash_opt_hash,
      },
};

//make_checksum
parser_callback_option callback_option_make_checksum[] = {
    {
     .command = XMC_PLAIN_TEXT,
     .func = &callback_make_checksum_opt_plain_text,
      },
    {
     .command = XMC_CHECKSUM_TEXT,
     .func = &callback_make_checksum_opt_checksum_text,
      },
};

//check_checksum
parser_callback_option callback_option_check_checksum[] = {

    {
     .command = XCC_PLAIN_TEXT,
     .func = &callback_check_checksum_opt_plain_text,
      },
    {
     .command = XCC_CHECKSUM_TEXT,
     .func = &callback_check_checksum_opt_checksum_text,
      },
};

//check_hash
parser_callback_option callback_option_check_hash[] = {

    {
     .command = XCH_PLAIN_TEXT,
     .func = &callback_check_hash_opt_plain_text,
      },
};

//convert_hash_to_point
parser_callback_option callback_option_convert_hash_to_point[] = {
    {
     .command = XCHTP_POINT,
     .func = &callback_convert_hash_to_point_opt_point,
      },
};

//convert_point_to_monomial_key
parser_callback_option callback_option_convert_point_to_monomial_key[] = {
    {
     .command = XCPTMK_MONOMIAL_KEY,
     .func = &callback_convert_point_to_monomial_key_opt_monomial_key,
      },
};

//convert_monomial_key_to_point
parser_callback_option callback_option_convert_monomial_key_to_point[] = {
    {
     .command = XCMKTP_POINT,
     .func = &callback_convert_monomial_key_to_point_opt_point,
      },
};

//convert_binomial_key_to_start_point
parser_callback_option callback_option_convert_binomial_key_to_start_point[] = {
    {
     .command = XCBKTSP_START_POINT,
     .func = &callback_convert_binomial_key_to_start_point_opt_start_point,
      },
};

//convert_start_point_to_point
parser_callback_option callback_option_convert_start_point_to_point[] = {
    {
     .command = XCSPTP_POINT,
     .func = &callback_convert_start_point_to_point_opt_point,
      },
};

//convert_point_to_start_point
parser_callback_option callback_option_convert_point_to_start_point[] = {
    {
     .command = XCPTSP_START_POINT,
     .func = &callback_convert_point_to_start_point_opt_start_point,
      },
};

//convert_monomial_key_to_monomial_commitment
parser_callback_option callback_option_convert_monomial_key_to_monomial_commitment[] = {
    {
     .command = XCMKTMC_MONOMIAL_COMMITMENT,
     .func = &callback_convert_monomial_key_to_monomial_commitment_opt_monomial_commitment,
      },
};

//convert_monomial_commitment_to_monomial_key
parser_callback_option callback_option_convert_monomial_commitment_to_monomial_key[] = {
    {
     .command = XCMCTMK_MONOMIAL_KEY,
     .func = &callback_convert_monomial_commitment_to_monomial_key_opt_monomial_key,
      },
};

//convert asymmetric certificate to binomial key
parser_callback_option callback_option_convert_asymmetric_certificate_to_binomial_key[] = {
    {
     .command = XCACTBK_BINOMIAL_KEY,
     .func = &callback_convert_asymmetric_certificate_to_binomial_key_opt_binomial_key,
      },
};

//convert asymmetric signature to binomial key
parser_callback_option callback_option_convert_asymmetric_signature_to_binomial_key[] = {
    {
     .command = XCASTBK_BINOMIAL_KEY,
     .func = &callback_convert_asymmetric_signature_to_binomial_key_opt_binomial_key,
      },
};

//convert symmetric signature to binomial key
parser_callback_option callback_option_convert_symmetric_signature_to_binomial_key[] = {
    {
     .command = XCSSTBK_BINOMIAL_KEY,
     .func = &callback_convert_symmetric_signature_to_binomial_key_opt_binomial_key,
      },
};

//convert binomial key to asymmetric signature 
parser_callback_option callback_option_convert_binomial_key_to_asymmetric_signature[] = {
    {
     .command = XCBKTAS_ASYMMETRIC_SIGNATURE,
     .func = &callback_convert_binomial_key_to_asymmetric_signature_opt_asymmetric_signature,
      },
};

//convert binomial key to symmetric signature 
parser_callback_option callback_option_convert_binomial_key_to_symmetric_signature[] = {
    {
     .command = XCBKTSS_SYMMETRIC_SIGNATURE,
     .func = &callback_convert_binomial_key_to_symmetric_signature_opt_symmetric_signature,
      },
};

//convert hash certificate to monomial key
parser_callback_option callback_option_convert_hash_to_monomial_key[] = {
    {
     .command = XCHTMK_MONOMIAL_KEY,
     .func = &callback_convert_hash_to_monomial_key_opt_monomial_key,
      },
};

//convert hash certificate to monomial key
parser_callback_option callback_option_convert_symmetric_certificate_to_monovalent_key[] = {
    {
     .command = XCSCTMK_MONOVALENT_KEY,
     .func = &callback_convert_sym_certificate_to_monovalent_key_opt_monovalent_key,
      },
};

//split_symmetric
parser_callback_option callback_option_split_symmetric[] = {
    {
     .command = XSS_PLAIN_TEXT,
     .func = &callback_split_symmetric_opt_plain_text,
      },
    {
     .command = XSS_CHALLENGE_TEXT,
     .func = &callback_split_symmetric_opt_challenge_text,
      },
    {
     .command = XSS_SOLUTION_TEXT,
     .func = &callback_split_symmetric_opt_solution_text,
      },
};

//encrypt_asymmetric
parser_callback_option callback_option_encrypt_asymmetric[] = {
    {
     .command = XEA_PLAIN_TEXT,
     .func = &callback_encrypt_asymmetric_opt_plain_text,
      },
    {
     .command = XEA_CIPHER_TEXT,
     .func = &callback_encrypt_asymmetric_opt_cipher_text,
      },
};

//encrypt_symmetric
parser_callback_option callback_option_encrypt_symmetric[] = {
    {
     .command = XES_PLAIN_TEXT,
     .func = &callback_encrypt_symmetric_opt_plain_text,
      },
    {
     .command = XES_CIPHER_TEXT,
     .func = &callback_encrypt_symmetric_opt_cipher_text,
      },
};

//join_symmetric
parser_callback_option callback_option_join_symmetric[] = {
    {
     .command = XJS_PLAIN_TEXT,
     .func = &callback_join_symmetric_opt_plain_text,
      },
    {
     .command = XJS_CHALLENGE_TEXT,
     .func = &callback_join_symmetric_opt_challenge_text,
      },
    {
     .command = XJS_SOLUTION_TEXT,
     .func = &callback_join_symmetric_opt_solution_text,
      },
};

//decipher_asymmetric
parser_callback_option callback_option_decipher_asymmetric[] = {
    {
     .command = XDA_PLAIN_TEXT,
     .func = &callback_decipher_asymmetric_opt_plain_text,
      },
    {
     .command = XDA_CIPHER_TEXT,
     .func = &callback_decipher_asymmetric_opt_cipher_text,
      },
};

//decipher_symmetric
parser_callback_option callback_option_decipher_symmetric[] = {
    {
     .command = XDS_PLAIN_TEXT,
     .func = &callback_decipher_symmetric_opt_plain_text,
      },
    {
     .command = XDS_CIPHER_TEXT,
     .func = &callback_decipher_symmetric_opt_cipher_text,
      },
};

//check_complete_blocks
parser_callback_option callback_option_check_complete_block[] = {
    {
     .command = XCCB_BLOCK_FILE,
     .func = &callback_check_complete_blocks_opt_block_file,
      }

};

//make_block
parser_callback_option callback_option_make_block[] = {
    {
     .command = XMB_OFFSET,
     .func = &callback_make_block_opt_offset,
      },
    {
     .command = XMB_LENGTH,
     .func = &callback_make_block_opt_length,
      },
    {
     .command = XMB_TAG,
     .func = &callback_make_block_opt_tag,
      },
    {
     .command = XMB_PLAIN_TEXT,
     .func = &callback_make_block_opt_plain_text,
      },
    {
     .command = XMB_BLOCK_FILE,
     .func = &callback_make_block_opt_block_file,
      },
};

//merge_block_symmetric
parser_callback_option callback_option_combine_block[] = {
    {
     .command = XCB_BLOCK_FILE,
     .func = &callback_combine_block_opt_block_file,
      },
    {
     .command = XCB_COMBINED_BLOCK_FILE,
     .func = &callback_combine_block_opt_combined_block_file,
      },
};

//strip_block_header
parser_callback_option callback_option_strip_header_from_block[] = {
    {
     .command = XSHFB_BLOCK_FILE,
     .func = &callback_strip_header_from_block_opt_block_file,
      },
    {
     .command = XSHFB_PLAIN_TEXT,
     .func = &callback_strip_header_from_block_opt_plain_text,
      },
};

//print_header
parser_callback_option callback_option_print_header[] = {
    {
     .command = XPH_XRN_FILE,
     .func = &callback_print_header_opt_xrn_file,
      },

};

parser_callback_option callback_option_get_capacity[] = {
    {
     .command = XGC_ENVELOP_FILE,
     .func = &callback_get_capacity_opt_envelop_file,
      },
    {
     .command = XGC_DISABLE_FOLDING,
     .func = &callback_get_capacity_opt_disable_folding,
      },
};

parser_callback_option callback_option_make_steganography_raw[] = {
    {
     .command = XMSR_SOURCE_FILE,
     .func = &callback_make_steganography_raw_opt_source_file,
      },
    {
     .command = XMSR_ENVELOP_FILE,
     .func = &callback_make_steganography_raw_opt_envelop_file,
      },
    {
     .command = XMSR_EMBEDDED_FILE,
     .func = &callback_make_steganography_raw_opt_embedded_file,
      },
};

parser_callback_option callback_option_make_steganography_block[] = {
    {
     .command = XMSB_SOURCE_FILE,
     .func = &callback_make_steganography_block_opt_source_file,
      },
    {
     .command = XMSB_ENVELOP_FILE,
     .func = &callback_make_steganography_block_opt_envelop_file,
      },
    {
     .command = XMSB_EMBEDDED_FILE,
     .func = &callback_make_steganography_block_opt_embedded_file,
      },
    {
     .command = XMSB_DISABLE_FOLDING,
     .func = &callback_make_steganography_block_opt_disable_folding,
      },
    {
     .command = XMSB_OFFSET,
     .func = &callback_make_steganography_block_opt_offset,
      },
    {
     .command = XMSB_LENGTH,
     .func = &callback_make_steganography_block_opt_length,
      },
    {
     .command = XMSB_TAG,
     .func = &callback_make_steganography_block_opt_tag,
      },
};

parser_callback_option callback_option_extract_steganography_raw[] = {
    {
     .command = XESR_EMBEDDED_FILE,
     .func = &callback_extract_steganography_raw_opt_embedded_file,
      },
    {
     .command = XESR_RAW_FILE,
     .func = &callback_extract_steganography_raw_opt_raw_file,
      },
};

parser_callback_option callback_option_extract_steganography_block[] = {
    {
     .command = XESB_EMBEDDED_FILE,
     .func = &callback_extract_steganography_block_opt_embedded_file,
      },
    {
     .command = XESB_BLOCK_FILE,
     .func = &callback_extract_steganography_block_opt_block_file,
      },
};

//print_lib_info
parser_callback_option callback_option_print_lib_info[] = {

};

parser_callback_option callback_option_version[] = {

};
#endif
